/**
 * Created by diracsun on 2016/12/11.
 * 全局配置/服务/公共方法
 */


var g = (function ($) {

    //--------------------------------------------------------------------------全局变量
    var
        // CDOE_INFO = {
        //         "0000": "成功",
        //         "0001": "用户名或密码错误",
        //         "0002": "用户名和密码不能为空"
        //     },
        env = 2, //1本机,2.28测试,3阿里云生产,4,28外网测试环境
        apiurlarr = ['127.0.0.1', 'http://127.0.0.1:82','http://127.0.0.1:83',''],
        // imgpatharr = ['127.0.0.1', 'oss'],
        ret = {
            //     "imgpath": "http://" + imgpatharr[env],
            //     "code": CDOE_INFO
        },
        apiurl = apiurlarr[env];
    //--------------------------------------------------------------------------公共方法


    // 首先备份下jquery的ajax方法
    var _ajax = $.ajax;

    // 重写jquery的ajax方法
    $.ajax = function (options) {
        // 备份opt中error和success方法
        var callback = {
            "beforeSend": function (XMLHttpRequest) {
            },
            "complete": function (XMLHttpRequest, textStatus) {
            },
            "error": function (XMLHttpRequest, textStatus, errorThrown) {
            },
            "success": function (data, textStatus) {
            }
        }

        console.log(JSON.stringify(options));

        // 判断参数中是否有beforeSend回调函数
        if (options.beforeSend) {
            callback.beforeSend = options.beforeSend;
        }

        // 判断参数中是否有complete回调函数
        if (options.complete) {
            callback.complete = options.complete;
        }

        // 判断参数中是否有error回调函数
        if (options.error) {
            callback.error = options.error;
        }

        // 判断参数中是否有success回调函数
        if (options.success) {
            callback.success = options.success;
        }

        // 扩展增强处理
        var _opt = $.extend(options, {
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                // 错误方法增强处理,处理系统级别异常/常用业务级别异常
                // session超时 设置 httpstatus 为300

                if (XMLHttpRequest.status === 0) {
                    layer.confirm('离开太久了,请重新登陆', {
                        btn: ['确定'] //按钮
                    }, function () {
                        ret.clearCookies();
                        location.href = "login.html"
                    });
                }
                else if (XMLHttpRequest.status === 404) {
                    layer.alert("系统超时,请检查您的网络情况!")
                }
                else if (XMLHttpRequest.status === 500) {
                    layer.alert("系统超时,请检查您的网络情况!!")
                }
                // console.log("----------------error msg:"+errorThrown+" httpstatus"+XMLHttpRequest.status);
                callback.error(XMLHttpRequest, textStatus, errorThrown);
            },
            success: function (data, textStatus) {

                if (data.success&&!data.success)
                {
                    console.log("logic fail  -"+data.success+"   --    "+data.error);
                    if(data.error==='未登录！')
                    {
                        layer.confirm('离开太久了,请重新登陆', {
                            btn: ['确定'] //按钮
                        }, function () {
                            ret.clearCookies();
                            location.href = "login.html"
                        });
                    }

                }
                // else  if (data.result&&!data.result){
                //     if(ret.isJson(data.result))
                //         console.log("----------------success result json:"+JSON.stringify(data.result));
                //     else
                //         console.log("----------------success result:"+data.result);
                //
                // }

                callback.success(data, textStatus);
            },
            beforeSend: function (XMLHttpRequest) {
                // console.log("ajax req_url %s ,req_data  %s", options.url, options.type=="POST"?JSON.stringify(options.data):"--");
                // console.time(options.url +" spending time");
                callback.beforeSend(XMLHttpRequest);
            },
            complete: function (XMLHttpRequest, textStatus, data) {
                // console.timeEnd(options.url +" spending time");
                // 请求完成后回调函数 (请求成功或失败之后均调用)。
                // 取消loading
                if (textStatus == 'timeout') {//超时,status还有success,error等值的情况
                    layer.alert("系统超时,请检查您的网络情况!")
                }

                ret.hideLoading();
                callback.complete(XMLHttpRequest, textStatus);
            }
        });

        // 返回重写的ajax
        return _ajax(_opt);
    };

    /**
     * 业务请求基础方法
     * @param _url
     * @param _data
     * @private
     */
    ret._apiPost = function (_url, _data) {
        var data = $.extend({}, {"ASYNC": true, "LOADING": false}, _data); //默认参数
        if (data.LOADING)
            ret.showLoading();
        var apiUrl = apiurl + _url;// +ret.getTs(),
        // token = ret.getCookie("T"),
        // memberid = ret.getCookie("MID"),
        // _headers_data = {
        //     "Content-Type": "application/json; charset=utf-8"
        // };

        // if (memberid != '') {
        //     _data.MEMBERID = memberid;
        // }

        // if (token != '') {
        //     _headers_data.token = token;
        // }
        
        var def = $.ajax({
            timeout: 31000,
            //headers: _headers_data,
            cache: false,
            async: data.ASYNC,
            url: apiUrl,
            dataType: 'json',
            type: 'POST',
            data: data
        });
        return def;
    };


    /**
     * @returns {{}}
     */
    $.fn.form2Json = function () {

        var d = {};
        var a = this.serializeArray();
        $.each(a, function () {
            if (d[this.name]) {
                if (!d[this.name].push) {
                    d[this.name] = [d[this.name]]
                }
                d[this.name].push(this.value.trim() || "")
            } else {
                d[this.name] = this.value.trim() || ""
            }
        });
        return d
    };


    ret.getDate = function (ts) {
        return new Date(parseInt(ts)).toLocaleString();
    }

    ret.limitac = function (obj, num) {

        var tmpps = '';

        $(obj).each(function (index, item) {
            if (index < num) {
                tmpps += $(item).html() + "<br>";
            }

        });
        return tmpps;

    }

    juicer.register('limitac', ret.limitac);


    juicer.register('ts2date', ret.getDate);


    /**
     * 设置cookie
     * @param name
     * @param value
     */
    ret.setCookie = function (name, value) {
        document.cookie = name + "=" + escape(value);
    };
    /**
     * 获取cookie值
     * @param name
     * @returns {*}
     */
    ret.getCookie = function (name) {
        var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
        if (arr = document.cookie.match(reg))
            return unescape(arr[2]);
        else
            return '';
    };

    /**
     * 删除cookie值
     * @param name
     */
    ret.delCookie = function (name) {
        var cval = getCookie(name);
        if (cval != null)
            document.cookie = name + "=" + cval;
    };

    /**
     * 清空cookie
     */
    ret.clearCookies = function () {
        var keys = document.cookie.match(/[^ =;]+(?=\=)/g);
        // console.log(keys);
        if (keys) {
            for (var i = keys.length; i--;)
                document.cookie = keys[i] + '=0;expires=' + new Date(0).toUTCString()
        }
    };
    /**
     * 显示loading
     */
    ret.showLoading = function () {
        $(".mask_cover").show();
    };

    /**
     * 隐藏loading
     */
    ret.hideLoading = function () {
        setTimeout(function () {
            $(".mask_cover").hide();
        }, 500)


    };

    /**
     * 页面跳转
     * @param href
     */
    ret.go = function (href, type) {
        // var path = window.ispc ? "/web/" : "/m/";
        if (href != "") {
            if (href.indexOf("http") != -1) {
                window.open(href.trim());
            }
            else {

                var path = "/web/html/pc";
                if (!type) {
                    g.showLoading();
                    window.location.href = path + href.trim();
                }
                else
                    window.open(path + href.trim());
            }


        }
    };

    //
    // /**
    //  * 加法运算，避免数据相加小数点后产生多位数和计算精度损失。
    //  *
    //  * @param num1加数1 | num2加数2
    //  */
    // ret.numAdd = function (num1, num2) {
    //     var baseNum, baseNum1, baseNum2;
    //     try {
    //         baseNum1 = num1.toString().split(".")[1].length;
    //     } catch (e) {
    //         baseNum1 = 0;
    //     }
    //     try {
    //         baseNum2 = num2.toString().split(".")[1].length;
    //     } catch (e) {
    //         baseNum2 = 0;
    //     }
    //     baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
    //     return ((num1 * baseNum + num2 * baseNum) / baseNum).toFixed(2);
    // };
    // /**
    //  * 减法运算，避免数据相减小数点后产生多位数和计算精度损失。
    //  *
    //  * @param num1被减数  |  num2减数
    //  */
    // ret.numSub = function (num1, num2) {
    //     var baseNum, baseNum1, baseNum2;
    //     try {
    //         baseNum1 = num1.toString().split(".")[1].length;
    //     } catch (e) {
    //         baseNum1 = 0;
    //     }
    //     try {
    //         baseNum2 = num2.toString().split(".")[1].length;
    //     } catch (e) {
    //         baseNum2 = 0;
    //     }
    //     baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
    //     var res = ((num1 * baseNum - num2 * baseNum) / baseNum).toFixed(2);
    //     return res < 0 ? 0 : res;
    // };
    // /**
    //  * 乘法运算，避免数据相乘小数点后产生多位数和计算精度损失。
    //  *
    //  * @param num1被乘数 | num2乘数
    //  */
    // ret.numMulti = function (num1, num2) {
    //     var baseNum = 0;
    //     try {
    //         baseNum += num1.toString().split(".")[1].length;
    //     } catch (e) {
    //     }
    //     try {
    //         baseNum += num2.toString().split(".")[1].length;
    //     } catch (e) {
    //     }
    //     return (Number(num1.toString().replace(".", "")) * Number(num2.toString().replace(".", "")) / Math.pow(10, baseNum)).toFixed(2);
    // };
    // /**
    //  * 除法运算，避免数据相除小数点后产生多位数和计算精度损失。
    //  *
    //  * @param num1被除数 | num2除数
    //  */
    // ret.numDiv = function (num1, num2) {
    //     var baseNum1 = 0, baseNum2 = 0;
    //     var baseNum3, baseNum4;
    //     try {
    //         baseNum1 = num1.toString().split(".")[1].length;
    //     } catch (e) {
    //         baseNum1 = 0;
    //     }
    //     try {
    //         baseNum2 = num2.toString().split(".")[1].length;
    //     } catch (e) {
    //         baseNum2 = 0;
    //     }
    //     with (Math) {
    //         baseNum3 = Number(num1.toString().replace(".", ""));
    //         baseNum4 = Number(num2.toString().replace(".", ""));
    //         return ((baseNum3 / baseNum4) * pow(10, baseNum2 - baseNum1)).toFixed(2);
    //     }
    // };
    //
    // /**
    //  * textarea 字数限制提示
    //  * @param obj
    //  * @param maxLen
    //  * <textarea style="width:100%" id="afinfo" rows="6" class="form-control hs-af-order" data-key="AFINFO"></textarea><span id="afinfomsg" class="max_msg fr">&nbsp;</span>
    //  * $(document.body).on("keydown keyup focus blur", ".subAfsApply #afinfo", function (event) {
    //  *       g.checkMaxInput(this,200);
    //  *       if(event.type==='focusout')
    //  *           g.resetMaxmsg();
    //  *   });
    //  */
    // ret.checkMaxInput = function (obj, maxLen) {
    //     if (g.isUndf(obj) || obj == "") {
    //         return;
    //     }
    //     if (g.isUndf(maxLen) || maxLen == "") {
    //         maxLen = 100;
    //     }
    //
    //     var strResult;
    //     var $obj = $(obj);
    //     var newid = $obj.attr("id") + 'msg';
    //
    //     if (obj.value.length > maxLen) {
    //         obj.value = obj.value.substring(0, maxLen);
    //     }
    //
    //     strResult = '<span id="' + newid + '" class="max_msg text-warning" >剩余' + (maxLen - obj.value.length) + '个字</span>'; //计算并显示剩余字数
    //     $("#" + newid).html(strResult);
    //
    // };
    /**
     * textarea 去除提示
     * @param obj
     * @param maxLen
     */
    ret.resetMaxmsg = function () {
        $("span.max_msg").html("&nbsp;");
    };

    /**
     * 获取url参数
     * @param name
     * @returns {null}
     */
    ret.getQryStr = function (key) {
        var reg = new RegExp("(^|&)" + key + "=([^&]*)(&|$)");
        var result = window.location.search.substr(1).match(reg);
        return result ? decodeURIComponent(result[2]) : '';
    };

    ret.lazyimg = function () {
        echo.init({
            offset: 100,
            throttle: 200,
            unload: false
        });
    };


    ret.getTs = function () {
        return "?t=" + new Date().getTime()
    }

    // ret.isIE = function(ver){
    //     var b = document.createElement('b');
    //     b.innerHTML = '<!--[if IE ' + ver + ']>1<![endif]-->';
    //     console.log("b.innerHTML -------- "+b.innerHTML);
    //
    //      var iever= (b.innerHTML === 1);
    //
    //     console.log("iever -------- "+iever);
    //     return iever;
    // }

    ret.isJson = function (str) {
        try {
            JSON.parse(str);
        } catch (e) {
            return false;
        }
        return true;
    }

    // if (env == 0 || env == 3)//阿里云oss图片方法
    // {
    //     juicer.register('image', ossImage);
    //     juicer.register('bImage', ossbImage);
    //
    // }
    // else {
    //     juicer.register('image', image);
    //     juicer.register('bImage', bImage);
    // }

    // juicer.register('tojson', tojson);


    $(document).on("click", ".wt-f-backtop", function () {
        $('body,html').animate({scrollTop: 0}, 500);
        return false;

    })


    var rtop = function () {

        var winh = parseFloat($(window).height());
        var sh = parseFloat($(window).scrollTop());
        var dh = parseFloat($(document).height()) - sh - winh;
        if (dh <= 500) {
            $(".wt-f-backtop").removeClass("hidden")
        }
        else {
            $(".wt-f-backtop").addClass("hidden")
        }

        var toolpostion = winh;

        if (sh < 480) {
            toolpostion = toolpostion + sh - 480;
        }

        $(".wt-tools").css("bottom", toolpostion / 2 - 72);
    }


    $(window).on('scroll', function () {
        rtop();
    });

    $(window).resize(function () {
        var left = 1200 + ($(document).width() - 1200) / 2 - 438;
        var top = $(window).height() - 510;
        $("#calcdiv").parent().css({"top": top + "px", "left": left + "px"});
        rtop();

    });


    $(document).on("click", ".wt-go", function () {

        var url = $(this).data("url");
        ret.go(url, null);
    })


    return ret;

})(jQuery);


